# @Version : 1.0
# @Author  : wxz
# @File    : jwt.py
# @Time    : 2025/5/29 15:55
# @Describe: 描述...
import time
from typing import Union, Any

from jose import jwt

from config import app_settings


class JWT:
    """
    生成 JWT Token
    """

    # JWT Token令牌有效时长
    ACCESS_TOKEN_EXPIRE_MINUTES = app_settings.jwt.access_token_expire_minutes  # 单位：分钟
    # 加密算法
    ALGORITHM = app_settings.jwt.algorithm
    # 密钥(加密盐)
    JWT_SECRET_KEY = app_settings.jwt.secret_key

    @classmethod
    def create_access_token(cls, subject: Union[str, Any], expires_delta: int = None )-> str:
        """
        根据用户信息创建 JWT Token令牌
        :param subject: 用户信息，一般为 user_id
        :param expires_delta: 过期时长 单位: 秒 默认值None
        :return: token字符串
        """
        # 有效时长
        if expires_delta:
            # int(time.time())当前时间，获取整数时间戳（秒级）
            expires_delta = int(time.time()) + expires_delta

        else:
            # 系统默认的过期时长 (秒)
            expires_delta = int(time.time()) + cls.ACCESS_TOKEN_EXPIRE_MINUTES * 60

        claims = {
            "exp": expires_delta,
            "sub": str(subject),
        }
        # 生成 JWT Token
        return jwt.encode(claims, cls.JWT_SECRET_KEY, algorithm=cls.ALGORITHM)


if __name__ == '__main__':
    print(JWT.create_access_token("0001"))








